package es.gesfutbol.web;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.ui.ModelMap;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import es.gesfutbol.dao.IComentariDao;
import es.gesfutbol.dao.IForumDao;
import es.gesfutbol.dao.IPenyistaDao;
import es.gesfutbol.dao.IUsuariRegistratDAO;
import es.gesfutbol.domini.implementacio.Comentari;
import es.gesfutbol.domini.implementacio.Forum;
import es.gesfutbol.domini.implementacio.Penyista;
import es.gesfutbol.domini.implementacio.UsuariRegistrat;
import es.gesfutbol.util.OrdenaComentariPerId;
import es.gesfutbol.web.backbean.ComentariBackBean;

public class ForumPenyaController extends MultiActionController {

	private static final String ID_PENYA_SESSION = "idDePenya";
	
	private IForumDao forumDao;
	
	private IPenyistaDao penyistaDao;
	
	private IUsuariRegistratDAO usuariRegistratDao; 
	
	private IComentariDao comentariDao;
	
	public IForumDao getForumDao() {
		return forumDao;
	}

	public void setForumDao(IForumDao forumDao) {
		this.forumDao = forumDao;
	}

	public IPenyistaDao getPenyistaDao() {
		return penyistaDao;
	}

	public void setPenyistaDao(IPenyistaDao penyistaDao) {
		this.penyistaDao = penyistaDao;
	}
	
	public IUsuariRegistratDAO getUsuariRegistratDao() {
		return usuariRegistratDao;
	}

	public void setUsuariRegistratDao(IUsuariRegistratDAO usuariRegistratDao) {
		this.usuariRegistratDao = usuariRegistratDao;
	}

	public IComentariDao getComentariDao() {
		return comentariDao;
	}

	public void setComentariDao(IComentariDao comentariDao) {
		this.comentariDao = comentariDao;
	}

	public ModelAndView init(HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		String aliesUsuari = request.getParameter("usuari");
		
		UsuariRegistrat usuariRegistrat = usuariRegistratDao.findByAlies(aliesUsuari);
		
		Penyista penyista = penyistaDao.findByIdUsuari(usuariRegistrat.getIdUsuari());
		ModelAndView model;
		if(penyista != null){
			penyista = penyistaDao.deproxy(penyista);
			Forum forum = forumDao.findByIdPenya(penyista.getPenya().getIdPenya());
			Set<Comentari> comentaris = forum.getComentaris();
			List<Comentari> llistaComent = new ArrayList<Comentari>(comentaris);
			Collections.sort(llistaComent, new OrdenaComentariPerId());
			
			ComentariBackBean nouComentari = new ComentariBackBean();
			nouComentari.setIdPenyista(penyista.getIdPenyista());
			nouComentari.setAliesPenyista(penyista.getUsuari().getAlies());
			nouComentari.setIdForum(forum.getIdForum());
			
			//Afegim l'idPenya a la sessió de l'aplicació
			request.getSession().setAttribute(ID_PENYA_SESSION, penyista.getPenya().getIdPenya());			
			
			ModelMap modelMap = new ModelMap();
			modelMap.addAttribute("llistaComentaris", llistaComent);
			modelMap.addAttribute("forum", forum);
			modelMap.put("nouComentari", nouComentari);
//			modelMap.addAttribute("penya",penyista.getPenya());
			model = new ModelAndView("usuari/forum", modelMap);
		}else{
			model = new ModelAndView("redirect:/crearPenya/init.htm?usuari=" + aliesUsuari);
		}
		
		
		return model;
	}
	
	public ModelAndView addComentari (HttpServletRequest request, HttpServletResponse response,
			ComentariBackBean comentariBB){
		Comentari comentari = new Comentari();
		comentari.setTitol(comentariBB.getTitol());
		comentari.setMissatge(comentariBB.getMissatge());
		comentari.setForum(forumDao.findById(comentariBB.getIdForum()));
		comentari.setPenyista(penyistaDao.findById(comentariBB.getIdPenyista()));
		comentari.setData(new Date());
		comentariDao.store(comentari);
		return new ModelAndView("redirect:init.htm?usuari=" + comentariBB.getAliesPenyista());
	}
	
	public ModelAndView deleteComentari (HttpServletRequest request, HttpServletResponse response){
		
		String usuari = request.getParameter("usuari");
		String idComentari = request.getParameter("comentari");
		comentariDao.delete(comentariDao.findById(Long.valueOf(idComentari)));
		return new ModelAndView("redirect:init.htm?usuari=" + usuari);
	}
}
